package monster.comm.database;
import java.util.*;

import javax.sql.DataSource;

import monster.comm.util.SpringApplicationContextFactory;

import sun.jdbc.rowset.*;

/**
 * 数据库jdbc代理,业务层不建议使用，业务层请用JdbcTemplatService这个接口
 * @author Administrator
 *
 */
public class DBManager {
     public JdbcTemplatService mg=null;

	  public DBManager() throws Exception {
		  
	    mg=(JdbcTemplatService)SpringApplicationContextFactory.getService("jdbcManager");
	   
	  }
	  
	  /**
	   * 得到数据库连接池
	   * @return
	   * @throws Exception
	   */
	  public DataSource getDS() throws Exception{
		  return mg.getDS();
	  }
	  public void update(String sql) throws Exception{
		  mg.update(sql);
		 
	  }
	  
	  public void updateByParam(String sql ,Object[] params) throws Exception{
		  mg.updateByParam(sql, params);
	  }
	  
	  /**
	   * 批修改删除 
	   * @param sql[] sql数组
	   * @return  每个数组的值是对应的sql修改数
	   * @throws HibernateException
	   */
	  public int[] batchMoreUpdate(String[] sql) throws Exception{
		  
		  return mg.batchMoreUpdate(sql);
	  }
	  
	  /**
	   * 得到记录集的条数
	   * @param sql
	   * @param argTable
	   * @return
	   * @throws Exception
	   */
	  public int getRowCount(String sql,Hashtable argTable)throws Exception{
         int num=0;
         CachedRowSet rs=null;
         if(argTable==null || argTable.size()==0){
        	rs=mg.findRowSet(sql);
        	
         }
         else{
        	
             rs=mg.findRowSetByParam(sql, argTable);
         }
         rs.next();
         num=rs.getInt(1);
         
         return num;
        
	  }
	  
	  /**
	   * 得到一个记录集合
	   * @param sql
	   * @param arg
	   * @return
	   * @throws Exception
	   */
	  public CachedRowSet getCRS(String sql, Hashtable arg) throws Exception{
		  CachedRowSet crs=null;
		  crs=mg.findRowSetByParam(sql, arg);
		  return  crs;
	  }
	  /**
	   * 得到分页当前页记录集合
	   * @param listSqlStr
	   * @param argTable
	   * @param rowCount
	   * @param pageIndex
	   * @param pageSize
	   * @return
	   * @throws Exception
	   */
	  public CachedRowSet  getRowset(String sql, Hashtable arg,int rowscount, int pageIndex, int pageSize)throws Exception{
		 
		    return mg.findRowset(sql, arg, rowscount, pageIndex, pageSize);
	  }
	  
	  public CachedRowSet getRowSet(String sql) throws Exception{
		return   mg.findRowSet(sql);
	  }
	  
	  public CachedRowSet QueryRowSet(String sql,Hashtable arg) throws Exception{
		 
		  return mg.findRowSetByParam(sql, arg);
	  }
	  
	  
	  /**
	   * 从一条sql语句里面获得一个vo对象的list集合
	   * @param sql eg:select * from test
	   * @param voClass  对应vo的class类,
	   * @param dataField 这个要注意，就是从ResulSet里面取出字段填充进vo的属性值，里面数组的大小写和属vo属性名的大小写要保持一致,如果vo的属性名集合<=resultSet包含的字段
	   * 则把这个dataFields设置为null
	   * @return vo对象的list集合
	   * @throws HibernateException
	   */
	  public List queryListBySql(String sql, Class voClass, String[] dataFields) throws Exception{
		  return mg.queryListBySql(sql,voClass,dataFields);
	  }
	  /**
	   * 从一条sql语句里面获得一个vo对象的list集合,前提：vo的属性名集合<=resultSet包含的字段
	   * @param sql eg:select * from test
	   * @param voClass  对应vo的class类,
	   * @return vo对象的list集合
	   * @throws HibernateException
	   */
	  public List queryListBySql(String sql, Class voClass) throws Exception{
		  return queryListBySql(sql,voClass,null);
	  }
	  
	  /**
	   * 从一条sql语句里面获得一个vo对象
	   * 参数说明请参考queryListBySql()方法
	   * @param sql
	   * @param voClass
	   * @param dataFields
	   * @return
	   * @throws HibernateException
	   */
	  public Object findVoBySql(String sql, Class voClass, String[] dataFields) throws Exception{
		  List list=queryListBySql(sql,voClass,dataFields);
		  return list.get(0);
	  }
	  

	  /**
	   * 从一条sql语句里面获得一个vo对象,前提：vo的属性名集合<=resultSet包含的字段
	   * 参数说明请参考queryListBySql()方法
	   * @param sql
	   * @param voClass
	   * @return
	   * @throws HibernateException
	   */
	  public Object findVoBySql(String sql, Class voClass) throws Exception{
		  List list=queryListBySql(sql,voClass);
		  return list.get(0);
	  }

}
